//: typeinfo/ClassInitialization.java
package typeinfo;

import java.util.*;

class Initable {

    static final int staticFinal = 47;

    static final int staticFinal2 = ClassInitialization.rand.nextInt(1000);//调用了new

    static final int staticFinal3 = 87;

    static {
        System.out.println("Initializing Initable");
    }
}

class Initable2 {

    static int staticNonFinal = 147;

    static {
        System.out.println("Initializing Initable2");
    }
}


class Initable3 {

    static int staticNonFinal = 74;

    static {
        System.out.println("Initializing Initable3");
    }
}

public class ClassInitialization {

    public static Random rand = new Random(47);

    public static void main(String[] args) throws Exception {
        //类字面常量
        Class initable = Initable.class;

        System.out.println("After creating Initable ref");
        // Does not trigger initialization:
        System.out.println(Initable.staticFinal);
        // Does trigger initialization:
        System.out.println(Initable.staticFinal2);

        // Does trigger initialization:
        System.out.println(Initable2.staticNonFinal);


        Class initable3 = Class.forName("typeinfo.Initable3");
        System.out.println("After creating Initable3 ref");
        System.out.println(Initable3.staticNonFinal);
    }
} /* Output:
After creating Initable ref
47
Initializing Initable
258
Initializing Initable2
147
Initializing Initable3
After creating Initable3 ref
74
*///:~
